javascript oop、instanceof 和基类
全部标签 我正在继承一个类,我想调用它的一个构造函数。但是,在调用它之前,我必须处理一些东西(不需要任何基类)。有什么办法我可以稍后调用它而不是在初始化列表中调用它?我相信这可以在Java和C#中完成,但我不确定C++。我需要在构造函数上传递的数据以后不能重新分配,所以我不能只是调用一个默认构造函数并在以后初始化它。 最佳答案 IsthereanywayIcanjustcallitlaterinsteadofcallingitontheinitializerlist?不,你不能。基类构造函数必须在初始化列表中调用,而且必须先调用。实际上,如果
当您不知道派生类型时,是否可以使用基类指针找到派生类对象的大小。谢谢。 最佳答案 没有直接的方法,但是你可以写一个虚拟的size()方法子类可以实现。中间模板类可以自动执行腿部工作。structbase{virtualsize_tsize()const=0;virtual~base(){}};templatestructintermediate:base{virtualsize_tsize()const{returnsizeof(T);}};structderived:intermediate{};这确实要求您的层次结构是多态的……
我想在我的C++游戏引擎中实现一个继承层次结构,它与Java有一些类比:所有对象都继承自Object类,某些功能由接口(interface)提供。只是一个类比,它给了我一些好处(不是严格的1:1Java:C++映射,这是不可能的)。这里的“接口(interface)”是指一个只有纯虚拟公共(public)方法的类。我知道这不是一个严格和精确的定义。所以我做了:classObject{...};/*interfaces*/classNameable:publicObject{...};classMoveable:publicObject{...};classMoveable3D:publ
在熟悉了基本类和封装的概念后,我开始着手理解多态性,但我不知道如何让它发挥作用。我搜索过的许多示例都被认为是真的,真的强制(类Foo和Bar对我来说太抽象了,我看不到实用程序),但这是我对基本概念的理解:你编写一个基类,从中派生出一大堆其他东西来改rebase方法所做(但不是它们"is"),然后你可以编写通用函数来接受和处理任何派生类,因为您已经在某种程度上标准化了它们的外观。在这个前提下,我尝试像这样实现基本的Animal->cat/dog层次结构:classAnimal{public:virtualvoidspeak()=0;};classDog:publicAnimal{publ
我正在阅读EffectiveC++并遇到了这个例子:classWindow{//baseclasspublic:virtualvoidonResize(){...}//baseonResizeimpl...};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thistoWindow,//thencallitsonResize;//thisdoesn'twork!.../
我遇到了一个析构函数是非虚的基类,尽管该基类有1个虚函数fv()。这个基类也有很多子类。其中许多子类定义了自己的fv()。我不知道程序中如何使用基类和子类的细节。我只知道程序运行良好,即使基类的析构函数应该是虚拟的。我想将基类的析构函数从非虚拟更改为虚拟。但我不确定后果。那么,会发生什么?更改后我还需要做些什么来确保程序正常运行?跟进:在我将基类的析构函数从非虚拟更改为虚拟后,程序未通过一个测试用例。结果让我很困惑。因为如果基类的析构函数不是虚拟的,那么程序就不会多态地使用基类。因为如果不是,它会导致未定义的行为。例如,Base*pb=newSub.所以,我认为如果我将析构函数从非虚拟
我有我的类X,它继承自Qt的类Base。我在我的类X中声明并定义了voidmySlot()槽,并且在X的构造函数中将一些信号连接到该槽。但是,在运行我的程序时,我收到一条错误消息,指出类Base中没有像voidmySlot()这样的插槽。为什么元对象编译器(moc)生成的代码在基类而不是我的(派生)类中寻找我的槽? 最佳答案 您是否在派生类上添加了Q_OBJECT宏? 关于c++-为什么Qt在基类而不是派生类中寻找我的插槽?,我们在StackOverflow上找到一个类似的问题:
classbase{.....virtualvoidfunction1();virtualvoidfunction2();};classderived::publicbase{intfunction1();intfunction2();};intmain(){derivedd;base*b=&d;intk=b->function1()//Whyusethisinsteadofthefollowingline?intk=d.function1();//Withthis,theneedforvirtualfunctionsisgone,right?}我不是CompSci工程师,我想知道这一
如果你有通过公共(public)继承实现的is-a继承关系,并且有一个菱形继承,你会得到类似的东西:一个流类从流派生的输入流和输出流类派生自两者的输入/输出流类在这种情况下,正如在标准库(?)中使用的那样,在iostream既is-aistream和is-ostream的范围内,istreamis-a流和ostreamis-a流,而且它们是相同的流,流中的任何函数,适用于iostream,都应该处理相同的底层结构。在C++中,为了共享istream和ostream中stream的拷贝,必须虚拟继承。但是,如果您愿意,您可以不虚拟继承,并且每次引用基类的成员时,指定两个拷贝中的哪一个(一
我在NodeJs中遇到了instanceof的奇怪行为。我正在尝试创建一个引发异常的模块,这些异常可以通过使用模块来捕获并根据异常类型进行处理。然而,测试类型“errorinstanceofmod.MyException”的调用总是返回false。mymodule.js:functionMyException(){}MyException.prototype=newError();MyException.prototype.constructor=MyException;functionFoo(){thrownewMyException();}exports.Foo=Foo;expor